package cn.virens.common.mybatis.service.dubbo;

import cn.virens.common.mybatis.entity.BaseModel;
import cn.virens.common.mybatis.entity.param.PageParam;
import cn.virens.common.mybatis.entity.result.PageResult;
import cn.virens.common.util.exception.APIException;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 通用的service接口
 *
 * @param <T> 实体类型
 * @author virens
 */
public interface BaseReadProvider<T extends BaseModel> {
    /**
     * 查询全部数据
     *
     * @param param 查询参数
     * @return List
     * @throws APIException 一般异常
     */
    List<? extends T> selectAll(Map<String, Object> param) throws APIException;

    /**
     * 根据 分页信息查询列表
     *
     * @param pageParam 查询参数
     * @return PageResult
     * @throws APIException 一般异常
     */
    PageResult<?> selectPage(PageParam pageParam) throws APIException;

    /**
     * 根据ID查询一条数据
     *
     * @param id 主键ID
     * @return T
     * @throws APIException 一般异常
     */
    T selectOne(Serializable id) throws APIException;
}
